Many modern electronic devices employ flash-based storage systems to improve storage throughput from overwrite-type storage systems of the past. Overwrite-type storage systems, such as hard disk drives (HDDs), were previously utilized more frequently in consumer electronic devices to minimize storage space requirements, e.g., by writing new data directly to previously-used storage blocks whose data was deemed to be obsolete, as opposed to only writing new data to free storage blocks. However, these predecessor storage systems have many intrinsic deficiencies that negatively impact storage system throughput for both read and write operations.
By way of example, some HDDs are only able to process roughly one hundred storage commands at a time; whereas, some flash-based storage systems, such as solid state drives (SSDs), can process a thousand or more storage commands at a time. SSDs and other flash-based storage systems provide device manufacturers with affordable, high-capacity storage options for integration within many of their consumer electronics products. Some consumer electronics products that can employ SSDs are personal computing devices, such as: desktop and laptop computers, mobile phones and smartphones, tablet computers, media player devices, electronic book devices, mobile hotspot devices, cameras, video recording devices, gaming units, or the like.
When a device's storage system receives an input-output (IO) request from an application running at the device, e.g., to read application data from an SSD or to write application data to an SSD, an operating system (OS) level device driver may assign a default timeout value to the corresponding IO request. The default timeout value is intended to allow the storage system sufficient time to process the corresponding IO command. Unfortunately, default timeout values assigned to IO requests by OS-level device drivers can be overly-conservative, particularly in the presence of various storage system throttling scenarios.
For instance, an SSD may be throttled in response to detecting an increase in die temperature of one or more logic units (LUNs), e.g., flash storage units, of the SSD, or in response to detecting an ambient temperature increase at the SSD, resulting from a nearby processor radiating heat, e.g., during computation-intensive processing operations. By throttling the SSD, and applying overly-conservative IO operation timeout values to incoming IO requests, the number of commands that an SSD may be able to process at a particular time can be significantly diminished. In some situations, this detrimental occurrence may result in an SSD's storage throughput being even slower than that of its HDD counterparts.
Moreover, excessive IO operation timeout delays can cause a command processing image (e.g., the image of a spinning beach ball for certain Apple® Mac OS systems) to appear on the display of a computing device for an extended period of time, e.g., for 20 seconds or longer. In response to being presented with this command processing image for an extended period of time, a user may elect to restart their computing device in an attempt to correct a presumed problem with their device. This is a detrimental result, because, in many scenarios, the command processing associated with the command processing image may have finished shortly after the time when the user elected to restart the computing device.
Accordingly, there exists a need for a solution that more appropriately sets IO operation timeout values for incoming IO requests of a SSD storage system during various storage system throttling scenarios, in lieu of simply assigning default, overly-conservative timeout values to various IO operations.